Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@sanity/form-builder

Package Overview
Dependencies
Maintainers
6
Versions
1215
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sanity/form-builder

Sanity form builder

  • 0.0.5
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3.7K
decreased by-60.22%
Maintainers
6
Weekly downloads
 
Created
Source

Form Builder

Big fat disclaimer: Work in progress

There is an example of a consumer app in the ./example that can be started with npm start

Limitations

Polymorphic arrays may only contain elements of one primitive type. Thus, this is invalid:

{
  "types": [
   {
    "name": "myType",
    "type": "array",
    "of": [
      {"type": "string", "title": "Street"},
      {"type": "string", "title": "E-mail"}
    ]
   }
  ]
}

Terminology

Type

Types are the building blocks for your schema. A type defines the structure and behavior of your data model.

There is a distiction between primitive types and container types.

A container type is a type that contains data of other types, e.g. array or object. A primitive type only represents one simple value, like the number 3 or the string foobar

Field

If you define an object type, you must also define its fields. E.g. if you are defining a person type, it may look like this:

{
  "name": "person",
  "type": "object",
  "fields": [
    {
      "name": "firstName",
      "title": "First name",
      "type": "string"
    },
    {
      "name": "lastName",
      "title": "Last name",
      "type": "string"
    }
  ]
}

You cannot create an object type that has no fields. We haven't yet had the need for a hash type that can have arbitrary key => value pairs (where keys are strings and value can be anything), but will consider supporting it in the future.

Input widgets

All input fields must follow a simple convention based protocol. Every input field must:

  • Accept a value prop which is the field's value
  • Accept an onChange function as prop which is called whenever a value changes

Schema

When writing a schema, type is implicitly object, unless otherwise specified. You're not allowed to set type: 'object' (redundant definition).

Only built-in types can take options. Below, email.placeholder is an option to string and versions.of is an option to list.

const schema = {
  name: 'someSchema',
  types: [
    {
      name: 'user',
      fields: [
        {
          name: 'email',
          type: 'string',
          title: 'E-mail address',
          placeholder: 'murgh@example.com'
        },
        {,
          name: 'profilePicture',
          type: 'image'
        }
      ]
    },
    {
      name: 'image',
      fields: [
        {
          name: 'fullSizeUrl',
          type: 'string'
        },
        {
          name: 'aspectRatio',
          type: 'number'
        },
        {
          name: 'versions',
          type: 'list',
          of: [{type: 'imageVersion'}]
        }
      ]
    },
    {
      name: 'imageVersion',
      fields: [
        {
          name: 'width',
          type: 'number'
        },
        {
          name: 'square',
          type: 'boolean'
        },
        {
          name: 'url',
          type: 'string'
        }
      ]
    }
  ]
}

Considerations / todo

  • Support for collaborative editing
  • Powerful validation rules
  • i18n
  • List item edit modality
  • Styling

FAQs

Package last updated on 22 Sep 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc